package org.eae.eldf.service.module.impl;

import java.util.ArrayList;
import java.util.List;

import org.eae.eldf.dao.module.IModuleMenuDao;
import org.eae.eldf.dao.module.impl.ModuleMenuDaoImpl;
import org.eae.eldf.dto.module.ModuleMenuDto;
import org.eae.eldf.dto.module.ModuleRolePurviewDto;
import org.eae.eldf.entity.module.ModuleInfo;
import org.eae.eldf.entity.module.ModuleMenu;
import org.eae.eldf.framework.pager.Pagination;
import org.eae.eldf.framework.persistence.Criteria;
import org.eae.eldf.framework.service.BaseServiceImpl;
import org.eae.eldf.service.module.ModuleMenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
@Transactional
public class ModuleMenuServiceImpl extends BaseServiceImpl<ModuleMenu> implements ModuleMenuService{

	private IModuleMenuDao moduleMenuDao;
	@Autowired
	public void setModuleMenuDao(ModuleMenuDaoImpl moduleMenuDao) {
		this.moduleMenuDao = moduleMenuDao;
		this.dao = moduleMenuDao;
	}
	
	
	/**
	 * 查询moduleMenu
	 */
	@Override
	public Pagination<ModuleMenu> queryPageModuleMenuList(
			Pagination<ModuleMenu> pager, String moduleName) {
		pager = moduleMenuDao.pageModuleMenuList(pager, moduleName);
		return pager;
	}

	
	/**
	 * 插入moduleMenu
	 */
	@Override
	public void insertModuleMenu(ModuleMenu moduleMenu) {
		this.insert(moduleMenu);
		
	}
	/**
	 * 通过moduleMenuId删除ModuleMenu
	 */
	@Override
	public void delete(Long id) {
		moduleMenuDao.delete(Criteria.create(ModuleMenu.class).where("moduleMenuId", new Object[]{id}));
	}
	/**
	 * 通过id查询所有ModuleMenu
	 */
	@Override
	public ModuleMenu queryById(Long id) {
		return moduleMenuDao.get(ModuleMenu.class, id);
	}
	/**
	 * 查询所有ModuleInfo
	 */
	@Override
	public List<ModuleInfo> queryModuleList() {
		return moduleMenuDao.queryModuleMenuList();
	}
	
	/**
	 *  根据moduleInfoId查询moduluMenu
	 */
	@Override
	public List<ModuleMenu> queryModuleMenuListById(long moduleInfoId) {
		return moduleMenuDao.queryModuleMenuListById(moduleInfoId);
	}
	/**
	 *  根据parentId查询moduluMenu
	 */
	@Override
	public List<ModuleMenu> queryModuleMenuListByParentId(long parentId) {
		return moduleMenuDao.queryModuleMenuListByParentId(parentId);
	}

	@Override
	//查询模块角色相关 菜单 并转成菜单树DTO
	public List<ModuleRolePurviewDto> querryZtreeMenuList(Long moduleInfoId) {
		return moduleMenuDao.querryZtreeMenuList(moduleInfoId);
	}
	/**
	 * 通过模块id查询所有menu+分页
	 */
	@Override
	public Pagination<ModuleMenuDto> pageMenuList(Pagination<ModuleMenuDto> pager,
			Long moduleInfoId ,Boolean isMenu) {
		pager = moduleMenuDao.pageMenuList(pager, moduleInfoId,isMenu);
		
		return pager;
	}
	/**
	 * 新增
	 * {@inheritDoc} 
	 * overridden:
	 * @Date        :      2016-7-28
	 * @see org.eae.eldf.service.module.ModuleMenuService#insertMenu(org.eae.eldf.entity.module.ModuleMenu)
	**/
	@Override
	public void insertMenu(ModuleMenuDto menu) {
		String sql = "INSERT INTO module_menu (menu_name, menu_title, is_root, is_leaf, parent_id, image_path, menu_path, menu_remark, sort_number, icon_cls, module_info_id, name_key, i18nName,channel,displayd) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
		List<Object> params = new ArrayList<Object>();
		params.add(menu.getMenuName());
		params.add(menu.getMenuTitle());
		params.add(menu.getIsRoot());
		params.add(1);
		params.add(menu.getParentId());
		params.add(menu.getImagePath());
		params.add(menu.getMenuPath());
		params.add(menu.getMenuRemark());
		params.add(menu.getSortNumber());
		params.add(menu.getIconCls());
		params.add(menu.getModuleInfoId());
		params.add(menu.getNameKey());
		params.add(menu.getI18n_Name());
		params.add(menu.getChannel());
		params.add(menu.getDisplayd());
		moduleMenuDao.executeBySQL(sql, params);
	}
	/**
	 * 修改
	 * {@inheritDoc} 
	 * overridden:
	 * @Date        :      2016-7-28
	 * @see org.eae.eldf.service.module.ModuleMenuService#updateMenu(org.eae.eldf.framework.persistence.Criteria)
	**/
	@Override
	public void updateMenu(ModuleMenuDto menu) {

		String sql = "UPDATE module_menu SET menu_name=?, "
				+ "menu_title=?, image_path=?, menu_path=?, "
				+ "menu_remark=?, sort_number=?, icon_cls=?, "
				+ "name_key=?, i18nName=?, channel=?, displayd=? "
				+ "WHERE module_menu_id=?";
		List<Object> params = new ArrayList<Object>();
		params.add(menu.getMenuName());
		params.add(menu.getMenuTitle());
		params.add(menu.getImagePath());
		params.add(menu.getMenuPath());
		params.add(menu.getMenuRemark());
		params.add(menu.getSortNumber());
		params.add(menu.getIconCls());
		params.add(menu.getNameKey());
		params.add(menu.getI18n_Name());
		params.add(menu.getChannel());
		params.add(menu.getDisplayd());
		params.add(menu.getModuleMenuId());
		moduleMenuDao.executeBySQL(sql,params);
	}

	/**
	 * 通过父级id查询子级
	 * {@inheritDoc} 
	 * overridden:
	 * @Date        :      2016年11月10日
	 * @see org.eae.eldf.service.module.ModuleMenuService#queryModuleListByParentId(java.lang.Long)
	*
	 */
	@Override
	public List<ModuleMenu> queryModuleListByParentId(Long id) {
		String sql = "select m.module_menu_id from module_menu m where parent_id =  ?";
		return moduleMenuDao.queryBySQL(sql,new Object[]{id}, ModuleMenu.class);
		
	}
	
	

}
